# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.DataCatalog.V1.Model.GoogleCloudDatacatalogV1Taxonomy do
  @moduledoc """
  A taxonomy is a collection of hierarchical policy tags that classify data along a common axis. For example, a "data sensitivity" taxonomy might contain the following policy tags: ``` + PII + Account number + Age + SSN + Zipcode + Financials + Revenue ``` A "data origin" taxonomy might contain the following policy tags: ``` + User data + Employee data + Partner data + Public data ```

  ## Attributes

  *   `activatedPolicyTypes` (*type:* `list(String.t)`, *default:* `nil`) - Optional. A list of policy types that are activated for this taxonomy. If not set, defaults to an empty list.
  *   `description` (*type:* `String.t`, *default:* `nil`) - Optional. Description of this taxonomy. If not set, defaults to empty. The description must contain only Unicode characters, tabs, newlines, carriage returns, and page breaks, and be at most 2000 bytes long when encoded in UTF-8.
  *   `displayName` (*type:* `String.t`, *default:* `nil`) - Required. User-defined name of this taxonomy. The name can't start or end with spaces, must contain only Unicode letters, numbers, underscores, dashes, and spaces, and be at most 200 bytes long when encoded in UTF-8. The taxonomy display name must be unique within an organization.
  *   `name` (*type:* `String.t`, *default:* `nil`) - Identifier. Resource name of this taxonomy in URL format. Note: Policy tag manager generates unique taxonomy IDs.
  *   `policyTagCount` (*type:* `integer()`, *default:* `nil`) - Output only. Number of policy tags in this taxonomy.
  *   `service` (*type:* `GoogleApi.DataCatalog.V1.Model.GoogleCloudDatacatalogV1TaxonomyService.t`, *default:* `nil`) - Output only. Identity of the service which owns the Taxonomy. This field is only populated when the taxonomy is created by a Google Cloud service. Currently only 'DATAPLEX' is supported.
  *   `taxonomyTimestamps` (*type:* `GoogleApi.DataCatalog.V1.Model.GoogleCloudDatacatalogV1SystemTimestamps.t`, *default:* `nil`) - Output only. Creation and modification timestamps of this taxonomy.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :activatedPolicyTypes => list(String.t()) | nil,
          :description => String.t() | nil,
          :displayName => String.t() | nil,
          :name => String.t() | nil,
          :policyTagCount => integer() | nil,
          :service =>
            GoogleApi.DataCatalog.V1.Model.GoogleCloudDatacatalogV1TaxonomyService.t() | nil,
          :taxonomyTimestamps =>
            GoogleApi.DataCatalog.V1.Model.GoogleCloudDatacatalogV1SystemTimestamps.t() | nil
        }

  field(:activatedPolicyTypes, type: :list)
  field(:description)
  field(:displayName)
  field(:name)
  field(:policyTagCount)
  field(:service, as: GoogleApi.DataCatalog.V1.Model.GoogleCloudDatacatalogV1TaxonomyService)

  field(:taxonomyTimestamps,
    as: GoogleApi.DataCatalog.V1.Model.GoogleCloudDatacatalogV1SystemTimestamps
  )
end

defimpl Poison.Decoder, for: GoogleApi.DataCatalog.V1.Model.GoogleCloudDatacatalogV1Taxonomy do
  def decode(value, options) do
    GoogleApi.DataCatalog.V1.Model.GoogleCloudDatacatalogV1Taxonomy.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.DataCatalog.V1.Model.GoogleCloudDatacatalogV1Taxonomy do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
